package com.itheima.springbootwebtlias.controller;

import com.itheima.springbootwebtlias.pojo.*;
import com.itheima.springbootwebtlias.service.ClazzService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RequestMapping("/clazzs")
@RestController
public class ClazzController {

    @Autowired
    private ClazzService clazzService;


    //添加班级信息处理器方法
    @PostMapping()
    public Result save(@RequestBody Clazz clazz){

        //1.接收请求参数 ：json(请求体中)
        //json接收参数: @RequestBody + 定义实体对象 /Map对象


        //2.调用业务层Service的功能方法，添加班级信息
        clazzService.saveClazz(clazz);

        //3.封装响应结果
        return Result.success();
    }

    //查询所有班级信息处理器方法
    @GetMapping("list")
    public Result QueryAll(){

        //1.接收请求参数：无
        log.info("查询所有班级信息，请求参数：无");

        //2.调用业务层Service的功能方法，查询所有班级信息
        List<Clazz> clazzs = clazzService.selectAll();
        log.info("查询所有班级信息，查询完毕：{}",clazzs);

        //3.封装响应结果
       return Result.success(clazzs);
    }

    //班级列表查询
    @GetMapping
    public Result page(ClazzQueryParam queryParam){
        //1.接收请求参数：
        log.info("查询班级列表，请求参数："+queryParam);

        //2.调用业务层Service的功能方法，查询班级列表
        PageResult pageResult = clazzService.page(queryParam);

        //3.封装响应结果
        return Result.success(pageResult);
    }

    //删除班级处理器方法
    @DeleteMapping("/{id}")
    public Result removeById(@PathVariable int id){
        //1.接收请求参数：
        log.info("删除班级，请求参数：{}",id);

        //2.调用业务层Service的功能方法，删除班级
        clazzService.removeById(id);
        log.info("删除班级，删除完毕");

        //3.封装响应结果
        return Result.success();
    }

    //班级列表查询
    @GetMapping("{id}")
    public Result findById(@PathVariable int id){
        //1.接收请求参数：
        log.info("根据id查询班级，请求参数：{}",id);

        //2.调用业务层Service的功能方法，查询班级
        Clazz clazz = clazzService.findById(id);
        log.info("根据id查询班级，查询完毕：{}",clazz);

        //3.封装响应结果
        return Result.success(clazz);
    }

    //修改班级处理器方法
    @PutMapping
    public Result update(@RequestBody Clazz clazz){
        //1.接收请求参数：json(请求体中)
        //json接收参数: @RequestBody + 封装对象
        log.info("修改班级，请求参数{}：",clazz);

        //2.调用业务层Service的功能方法，修改班级
        clazzService.update(clazz);
        log.info("修改班级，修改完毕");

        //3.封装响应结果
        return Result.success();
    }


}
